home *** CD-ROM | disk | FTP | other *** search
- /*
- * $Header: /home/harbor/davy/system/nfswatch/RCS/sgi.map.h,v 4.0 1993/03/01 19:59:00 davy Exp $
- *
- * sgi.map.h - made up from various other header files
- *
- * Tim Hudson
- * Mincom Pty Ltd
- * Mincom Centre
- * Juliette Street
- * Greenslopes 4120
- * Brisbane Australia
- *
- * tjh@mincom.oz.au
- *
- * $Log: sgi.map.h,v $
- * Revision 4.0 1993/03/01 19:59:00 davy
- * NFSWATCH Version 4.0.
- *
- * Revision 1.3 1993/01/13 21:25:45 davy
- * Added ether_header, so we don't need to include the ultrix map.
- *
- * Revision 1.2 1993/01/13 20:18:17 davy
- * Added RCS headers.
- *
- */
-
- #ifndef IPPROTO_ND
- /* Trying to compile this not on a Sun system */
- #define IPPROTO_ND 77 /* From <netinet/in.h> on a Sun somewhere */
- #endif /* IPPROTO_ND */
-
- struct ether_addr {
- u_char ether_addr_octet[6];
- };
-
- #ifndef ETHERTYPE_REVARP
- /* some systems don't define this */
- #define ETHERTYPE_REVARP 0x8035
- #define REVARP_REQUEST 3
- #define REVARP_REPLY 4
- #endif /* ETHERTYPE_REVARP */
-
- /* Map things in the ether_arp struct */
- #define arp_xsha arp_sha
- #define arp_xspa arp_spa
- #define arp_xtha arp_tha
- #define arp_xtpa arp_tpa
-
- /* Map protocol types */
- #define ETHERPUP_IPTYPE ETHERTYPE_IP
- #define ETHERPUP_REVARPTYPE ETHERTYPE_REVARP
- #define ETHERPUP_ARPTYPE ETHERTYPE_ARP
-
- /* newish RIP commands */
- #ifndef RIPCMD_POLL
- #define RIPCMD_POLL 5
- #endif /* RIPCMD_POLL */
- #ifndef RIPCMD_POLLENTRY
- #define RIPCMD_POLLENTRY 6
- #endif /* RIPCMD_POLLENTRY */
-
- /* good old SGI bastards not putting all the definitions in the
- * include files ... this defn pulled from <sys/vfs.h> SunOS4.1
- */
-
- typedef struct {
- ushort val[2];
- } fsid_t;
-
-
- /* DIRECT include of SunOS 4.1 <nfs/nfs.h> as the IRIX <sys/fs/nfs.h>
- * is in such a state as to be confusing/painful to use
- */
-
- /* @(#)nfs.h 2.40 89/12/13 SMI */
-
- #ifndef _nfs_nfs_h
- #define _nfs_nfs_h
-
- /* Maximum size of data portion of a remote request */
- #define NFS_MAXDATA 8192
- #define NFS_MAXNAMLEN 255
- #define NFS_MAXPATHLEN 1024
-
- /*
- * Rpc retransmission parameters
- */
- #define NFS_TIMEO 11 /* initial timeout in tenths of a sec. */
- #define NFS_RETRIES 5 /* times to retry request */
-
- /*
- * maximum transfer size for different interfaces
- */
- #define ECTSIZE 2048
- #define IETSIZE 8192
-
- /*
- * Error status
- * Should include all possible net errors.
- * For now we just cast errno into an enum nfsstat.
- */
- enum nfsstat {
- NFS_OK = 0, /* no error */
- NFSERR_PERM=EPERM, /* Not owner */
- NFSERR_NOENT=ENOENT, /* No such file or directory */
- NFSERR_IO=EIO, /* I/O error */
- NFSERR_NXIO=ENXIO, /* No such device or address */
- NFSERR_ACCES=EACCES, /* Permission denied */
- NFSERR_EXIST=EEXIST, /* File exists */
- NFSERR_NODEV=ENODEV, /* No such device */
- NFSERR_NOTDIR=ENOTDIR, /* Not a directory */
- NFSERR_ISDIR=EISDIR, /* Is a directory */
- NFSERR_FBIG=EFBIG, /* File too large */
- NFSERR_NOSPC=ENOSPC, /* No space left on device */
- NFSERR_ROFS=EROFS, /* Read-only file system */
- NFSERR_NAMETOOLONG=ENAMETOOLONG, /* File name too long */
- NFSERR_NOTEMPTY=ENOTEMPTY, /* Directory not empty */
- NFSERR_DQUOT=EDQUOT, /* Disc quota exceeded */
- NFSERR_STALE=ESTALE, /* Stale NFS file handle */
- NFSERR_WFLUSH /* write cache flushed */
- };
- #define puterrno(error) ((enum nfsstat)error)
- #define geterrno(status) ((int)status)
-
- /*
- * File types
- */
- enum nfsftype {
- NFNON,
- NFREG, /* regular file */
- NFDIR, /* directory */
- NFBLK, /* block special */
- NFCHR, /* character special */
- NFLNK /* symbolic link */
- };
-
- /*
- * Special kludge for fifos (named pipes) [to adhere to NFS Protocol Spec]
- *
- * VFIFO is not in the protocol spec (VNON will be replaced by VFIFO)
- * so the over-the-wire representation is VCHR with a '-1' device number.
- *
- * NOTE: This kludge becomes unnecessary with the Protocol Revision,
- * but it may be necessary to support it (backwards compatibility).
- */
- #define NFS_FIFO_TYPE NFCHR
- #define NFS_FIFO_MODE S_IFCHR
- #define NFS_FIFO_DEV (~0)
-
- /* identify fifo in nfs attributes */
- #define NA_ISFIFO(NA) (((NA)->na_type == NFS_FIFO_TYPE) && \
- ((NA)->na_rdev == NFS_FIFO_DEV))
-
- /* set fifo in nfs attributes */
- #define NA_SETFIFO(NA) { \
- (NA)->na_type = NFS_FIFO_TYPE; \
- (NA)->na_rdev = NFS_FIFO_DEV; \
- (NA)->na_mode = ((NA)->na_mode&~S_IFMT)|NFS_FIFO_MODE; \
- }
-
-
- /*
- * Size of an fhandle in bytes
- */
- #define NFS_FHSIZE 32
-
- /*
- * File access handle
- * This structure is the Sun server representation of a file.
- * It is handed out by a server for the client to use in further
- * file transactions.
- */
-
- #ifdef NFSSERVER
- /*
- * This struct is only used to find the size of the data field in the
- * fhandle structure below.
- */
- static
- struct fhsize {
- fsid_t f1;
- u_short f2;
- char f3[4];
- u_short f4;
- char f5[4];
- };
- #define NFS_FHMAXDATA ((NFS_FHSIZE - sizeof (struct fhsize) + 8) / 2)
-
- struct svcfh {
- fsid_t fh_fsid; /* filesystem id */
- u_short fh_len; /* file number length */
- char fh_data[NFS_FHMAXDATA]; /* and data */
- u_short fh_xlen; /* export file number length */
- char fh_xdata[NFS_FHMAXDATA]; /* and data */
- };
-
- typedef struct svcfh fhandle_t;
- #else
- /*
- * This is the client view of an fhandle
- */
- typedef struct {
- char fh_data[NFS_FHSIZE]; /* opaque data */
- } fhandle_t;
- #endif
-
-
- /*
- * Arguments to remote write and writecache
- */
- struct nfswriteargs {
- fhandle_t wa_fhandle; /* handle for file */
- u_long wa_begoff; /* beginning byte offset in file */
- u_long wa_offset; /* current byte offset in file */
- u_long wa_totcount; /* total write cnt (to this offset) */
- u_long wa_count; /* size of this write */
- char *wa_data; /* data to write (up to NFS_MAXDATA) */
- struct mbuf *wa_mbuf; /* mbuf containing data */
- };
-
-
- /*
- * File attributes
- */
- struct nfsfattr {
- enum nfsftype na_type; /* file type */
- u_long na_mode; /* protection mode bits */
- u_long na_nlink; /* # hard links */
- u_long na_uid; /* owner user id */
- u_long na_gid; /* owner group id */
- u_long na_size; /* file size in bytes */
- u_long na_blocksize; /* prefered block size */
- u_long na_rdev; /* special device # */
- u_long na_blocks; /* Kb of disk used by file */
- u_long na_fsid; /* device # */
- u_long na_nodeid; /* inode # */
- struct timeval na_atime; /* time of last access */
- struct timeval na_mtime; /* time of last modification */
- struct timeval na_ctime; /* time of last change */
- };
-
- #define n2v_type(x) (NA_ISFIFO(x) ? VFIFO : (enum vtype)((x)->na_type))
- #define n2v_rdev(x) (NA_ISFIFO(x) ? 0 : (x)->na_rdev)
-
- /*
- * Arguments to remote read
- */
- struct nfsreadargs {
- fhandle_t ra_fhandle; /* handle for file */
- u_long ra_offset; /* byte offset in file */
- u_long ra_count; /* immediate read count */
- u_long ra_totcount; /* total read cnt (from this offset) */
- };
-
- /*
- * Status OK portion of remote read reply
- */
- struct nfsrrok {
- struct nfsfattr rrok_attr; /* attributes, need for pagin */
- u_long rrok_count; /* bytes of data */
- char *rrok_data; /* data (up to NFS_MAXDATA bytes) */
- char *rrok_map; /* pointer to mapped data */
- struct vnode *rrok_vp; /* vnode assoc. with mapping */
- };
-
- /*
- * Reply from remote read
- */
- struct nfsrdresult {
- enum nfsstat rr_status; /* status of read */
- union {
- struct nfsrrok rr_ok_u; /* attributes, need for pagin */
- } rr_u;
- };
- #define rr_ok rr_u.rr_ok_u
- #define rr_attr rr_u.rr_ok_u.rrok_attr
- #define rr_count rr_u.rr_ok_u.rrok_count
- #define rr_data rr_u.rr_ok_u.rrok_data
- #define rr_map rr_u.rr_ok_u.rrok_map
- #define rr_vp rr_u.rr_ok_u.rrok_vp
-
-
- /*
- * File attributes which can be set
- */
- struct nfssattr {
- u_long sa_mode; /* protection mode bits */
- u_long sa_uid; /* owner user id */
- u_long sa_gid; /* owner group id */
- u_long sa_size; /* file size in bytes */
- struct timeval sa_atime; /* time of last access */
- struct timeval sa_mtime; /* time of last modification */
- };
-
-
- /*
- * Reply status with file attributes
- */
- struct nfsattrstat {
- enum nfsstat ns_status; /* reply status */
- union {
- struct nfsfattr ns_attr_u; /* NFS_OK: file attributes */
- } ns_u;
- };
- #define ns_attr ns_u.ns_attr_u
-
-
- /*
- * NFS_OK part of read sym link reply union
- */
- struct nfssrok {
- u_long srok_count; /* size of string */
- char *srok_data; /* string (up to NFS_MAXPATHLEN bytes) */
- };
-
- /*
- * Result of reading symbolic link
- */
- struct nfsrdlnres {
- enum nfsstat rl_status; /* status of symlink read */
- union {
- struct nfssrok rl_srok_u; /* name of linked to */
- } rl_u;
- };
- #define rl_srok rl_u.rl_srok_u
- #define rl_count rl_u.rl_srok_u.srok_count
- #define rl_data rl_u.rl_srok_u.srok_data
-
-
- /*
- * Arguments to readdir
- */
- struct nfsrddirargs {
- fhandle_t rda_fh; /* directory handle */
- u_long rda_offset; /* offset in directory (opaque) */
- u_long rda_count; /* number of directory bytes to read */
- };
-
- /*
- * NFS_OK part of readdir result
- */
- struct nfsrdok {
- u_long rdok_offset; /* next offset (opaque) */
- u_long rdok_size; /* size in bytes of entries */
- bool_t rdok_eof; /* true if last entry is in result */
- struct dirent *rdok_entries; /* variable number of entries */
- };
-
- /*
- * Readdir result
- */
- struct nfsrddirres {
- u_long rd_bufsize; /* client request size (not xdr'ed) */
- u_long rd_origreqsize; /* client request size */
- enum nfsstat rd_status;
- union {
- struct nfsrdok rd_rdok_u;
- } rd_u;
- };
- #define rd_rdok rd_u.rd_rdok_u
- #define rd_offset rd_u.rd_rdok_u.rdok_offset
- #define rd_size rd_u.rd_rdok_u.rdok_size
- #define rd_eof rd_u.rd_rdok_u.rdok_eof
- #define rd_entries rd_u.rd_rdok_u.rdok_entries
-
-
- /*
- * Arguments for directory operations
- */
- struct nfsdiropargs {
- fhandle_t da_fhandle; /* directory file handle */
- char *da_name; /* name (up to NFS_MAXNAMLEN bytes) */
- };
-
- /*
- * NFS_OK part of directory operation result
- */
- struct nfsdrok {
- fhandle_t drok_fhandle; /* result file handle */
- struct nfsfattr drok_attr; /* result file attributes */
- };
-
- /*
- * Results from directory operation
- */
- struct nfsdiropres {
- enum nfsstat dr_status; /* result status */
- union {
- struct nfsdrok dr_drok_u; /* NFS_OK result */
- } dr_u;
- };
- #define dr_drok dr_u.dr_drok_u
- #define dr_fhandle dr_u.dr_drok_u.drok_fhandle
- #define dr_attr dr_u.dr_drok_u.drok_attr
-
- /*
- * arguments to setattr
- */
- struct nfssaargs {
- fhandle_t saa_fh; /* fhandle of file to be set */
- struct nfssattr saa_sa; /* new attributes */
- };
-
- /*
- * arguments to create and mkdir
- */
- struct nfscreatargs {
- struct nfsdiropargs ca_da; /* file name to create and parent dir */
- struct nfssattr ca_sa; /* initial attributes */
- };
-
- /*
- * arguments to link
- */
- struct nfslinkargs {
- fhandle_t la_from; /* old file */
- struct nfsdiropargs la_to; /* new file and parent dir */
- };
-
- /*
- * arguments to rename
- */
- struct nfsrnmargs {
- struct nfsdiropargs rna_from; /* old file and parent dir */
- struct nfsdiropargs rna_to; /* new file and parent dir */
- };
-
- /*
- * arguments to symlink
- */
- struct nfsslargs {
- struct nfsdiropargs sla_from; /* old file and parent dir */
- char *sla_tnm; /* new name */
- struct nfssattr sla_sa; /* attributes */
- };
-
- /*
- * NFS_OK part of statfs operation
- */
- struct nfsstatfsok {
- u_long fsok_tsize; /* preferred transfer size in bytes */
- u_long fsok_bsize; /* fundamental file system block size */
- u_long fsok_blocks; /* total blocks in file system */
- u_long fsok_bfree; /* free blocks in fs */
- u_long fsok_bavail; /* free blocks avail to non-superuser */
- };
-
- /*
- * Results of statfs operation
- */
- struct nfsstatfs {
- enum nfsstat fs_status; /* result status */
- union {
- struct nfsstatfsok fs_fsok_u; /* NFS_OK result */
- } fs_u;
- };
- #define fs_fsok fs_u.fs_fsok_u
- #define fs_tsize fs_u.fs_fsok_u.fsok_tsize
- #define fs_bsize fs_u.fs_fsok_u.fsok_bsize
- #define fs_blocks fs_u.fs_fsok_u.fsok_blocks
- #define fs_bfree fs_u.fs_fsok_u.fsok_bfree
- #define fs_bavail fs_u.fs_fsok_u.fsok_bavail
-
- /*
- * XDR routines for handling structures defined above
- */
- bool_t xdr_attrstat();
- bool_t xdr_creatargs();
- bool_t xdr_diropargs();
- bool_t xdr_diropres();
- bool_t xdr_drok();
- bool_t xdr_fattr();
- bool_t xdr_fhandle();
- bool_t xdr_linkargs();
- bool_t xdr_rddirargs();
- bool_t xdr_putrddirres();
- bool_t xdr_getrddirres();
- bool_t xdr_rdlnres();
- bool_t xdr_rdresult();
- bool_t xdr_readargs();
- bool_t xdr_rnmargs();
- bool_t xdr_rrok();
- bool_t xdr_saargs();
- bool_t xdr_sattr();
- bool_t xdr_slargs();
- bool_t xdr_srok();
- bool_t xdr_timeval();
- bool_t xdr_writeargs();
- bool_t xdr_statfs();
-
- /*
- * Remote file service routines
- */
- #define RFS_NULL 0
- #define RFS_GETATTR 1
- #define RFS_SETATTR 2
- #define RFS_ROOT 3
- #define RFS_LOOKUP 4
- #define RFS_READLINK 5
- #define RFS_READ 6
- #define RFS_WRITECACHE 7
- #define RFS_WRITE 8
- #define RFS_CREATE 9
- #define RFS_REMOVE 10
- #define RFS_RENAME 11
- #define RFS_LINK 12
- #define RFS_SYMLINK 13
- #define RFS_MKDIR 14
- #define RFS_RMDIR 15
- #define RFS_READDIR 16
- #define RFS_STATFS 17
- #define RFS_NPROC 18
-
- /*
- * remote file service numbers
- */
- #define NFS_PROGRAM ((u_long)100003)
- #define NFS_VERSION ((u_long)2)
- #define NFS_PORT 2049
-
- #endif /*!_nfs_nfs_h*/
-